package main

import (
	"fmt"
	"sync"
	"time"
)

// 申明全局等待组变量
var wg sync.WaitGroup

// 演示使用sync包的waitgroup进行等待
func printHelloWorld(i int) {
	// 告诉当前goroutine已完成
	// 每完成一个就-1
	defer wg.Done()
	fmt.Println("hello go", i)
}

func Amain() {
	// for i := 1; i <= 10; i++ {
	// 	// 登记新增的一个goroutine
	// 	wg.Add(1)
	// 	go printHelloWorld(i)
	// 	fmt.Println("nihao")
	// }

	// for i := 0; i < 5; i++ {
	// 	wg.Add(1)
	// 	go func(i0 int) {
	// 		defer wg.Done()
	// 		fmt.Println(i0)
	// 	}(i)
	// }

	sec := make(chan int, 5)
	wg.Add(1)
	go func() {
		defer wg.Done()
		for i := 0; i < 5; i++ {
			time.Sleep(500 * time.Millisecond)
			sec <- i
		}
		close(sec)
	}()
	wg.Add(1)
	go func() {
		defer wg.Done()
		for i := 0; i < 10; i++ {
			time.Sleep(1 * time.Second)
			fmt.Println(<-sec)
		}
	}()

	// 等待goroutine完成
	wg.Wait()
}
